/* Hausaufgabe 2
Parallelisierung von Assembler-Programme mit SSE */
.data
floatout: .string "Wert %f\n"
x: .float 12.0, 12.0, 3.0, 71.0 // vector 1
y: .float 19.0, 10.0, 111.0, 12.0 // vector 2
n: .long 4 // dimension

result: .float 0.0 // result

.text

.globl main
main:

// Alle Werte miteinander multiplizieren
// x1*y1, x2*y2, ...
movups x, %xmm0
movups y, %xmm1

mulps %xmm1, %xmm0

// Alle Werte miteinander addieren
// x1*y1+x2*y2+...
movl n, %ecx
movups %xmm0, %xmm2
.add:
shufps $0x93, %xmm2, %xmm2
addss %xmm2, %xmm0
decl %ecx
cmpl $1, %ecx
jg .add


// Ergebnis ausgeben
movss %xmm0, result

fld result
fstpl (%esp) // output
pushl $floatout
call printf

// Exit
movl $1, %eax
int $0x80
